home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekikoh Dennoh Club 1
/
Gekikoh Dennoh Club Vol. 1 (Japan).7z
/
Gekikoh Dennoh Club Vol. 1 (Japan) (Track 1).bin
/
kowin
/
archive
/
sys
/
kowin14d.lzh
/
doc
/
library
/
mm_alloc.man
< prev
next >
Wrap
Text File
|
1995-11-23
|
5KB
|
118 lines
完全オリジナルのメモリ管理ルーチン mm_alloc ライブラリ
Copyright 1995 Ogasawara Hiroyuki (COR.)
このライブラリは Ko-Window 上からも使用できるヒープ領域の自動拡張型 malloc
ライブラリです。Ko-Window 上からの使用の場合、XClib でも libc でもどちらから
でも使用できます。ただし必ず他のライブラリより先に1番最初にリンクして下さい。
mm_klib.a Ko-Window 用
mm_alib.a 一般用
1. 互換ルーチン
void *malloc( size )
-------------------------------------------------------------------------------
int size;
指定サイズヒープからメモリを確保し、そのポインタを返します。もしヒー
プ領域が足りなくてメモリが確保できない場合は、空きメモリがある限り自
分でヒープ領域を拡大します。Ko-Window 上での使用も当然 OK です。それ
でもメモリが確保できない場合は NULL を返します。なお、確保するアドレ
スは必ず偶数番地(実際は4byte単位)になります。拡張する場合のヒープ領
域の単位は変数 mm_BlockSize に設定することができます。(デフォルトは
64Kbyte 単位)
-------------------------------------------------------------------------------
void free( ptr )
-------------------------------------------------------------------------------
void *ptr;
malloc() で確保したメモリを開放します。malloc() で得たポインタ以外の
アドレスを渡してはいけません。なお、この関数で確保したメモリを全部開
放したとしても、malloc() で拡大されたヒープ領域は小さくはなりません。
-------------------------------------------------------------------------------
void *realloc( ptr, size )
-------------------------------------------------------------------------------
void *ptr;
int size;
malloc() で確保したメモリのサイズを変更し、新たなアドレスを返します。
サイズ変更できなかった場合は NULL を返します。
-------------------------------------------------------------------------------
void *calloc( count, size )
-------------------------------------------------------------------------------
int count;
int size;
size サイズで count 個分のメモリを確保し、ゼロクリアしたのちそのアド
レスを返します。内部で malloc() を呼び出しています。戻り値や基本的な
動作は malloc() と同じです。
-------------------------------------------------------------------------------
2. ヒープ確保ルーチン
このライブラリで使用するヒープ領域は、C 言語のスタートアップルーチンでは初
期化されません。そのため、あらかじめ以下の3種類の方法のうちどれかで初期化を
しなければなりません。
(1) Ko-Window アプリケーションの場合
他のライブラリより先に mm_klib.a をリンクして下さい。それだ
けで OK です。初期ヒープサイズは WindowHeapSize で与えます。
MiniTERM(mtmlib) でも当然使えます。
ただし、GlobalInit/GlobalExit を使用しているアプリケーション
では使えません。(普通そういうアプリはありません)
(2) 初期ヒープとしてシステムヒープを利用する場合。
mm_new_heap_init()/mm_new_heap_quit() を使う
(3) 初期ヒープは使わずすべて自分でメモリ管理るする場合
mm_heap_init()/mm_heap_quit() を使う
void* mm_heap_init( size )
-------------------------------------------------------------------------------
int size;
専用のヒープ領域を新たに確保します。確保できなければ NULL を返します。
この関数で確保するヒープ領域は、通常のプロセスのヒープ領域とは異なっ
ています。システムのヒープ領域が 0 で、新たに確保する必要がある場合
に使用して下さい。このヒープ領域を開放する場合は必ず mm_heap_quit()
を使用して下さい。
-------------------------------------------------------------------------------
void* mm_heap_quit()
-------------------------------------------------------------------------------
mm_heap_init() で確保したヒープ領域を全部開放します。プログラムの終
了時に呼び出します。
-------------------------------------------------------------------------------
void* mm_new_heap_init( ptr, size )
-------------------------------------------------------------------------------
void *ptr;
int size;
すでにあるメモリブロックの先頭アドレスとポインタを与えて、それをこの
ライブラリようの初期ヒープエリアとして使用します。このヒープ領域を開
放する場合は必ず mm_new_heap_quit() を使用して下さい。
-------------------------------------------------------------------------------
void* mm_new_heap_quit()
-------------------------------------------------------------------------------
mm_new_heap_init() で確保したヒープ領域を全部開放します。プログラム
の終了時に呼び出します。このルーチンは mm_heap_quit() とは違い、最初
のメモリブロックは開放しません。
-------------------------------------------------------------------------------
小笠原博之 oga@dgw.yz.yamagata-u.ac.jp
DenDenNET: DEN0006 COR.